package com.aiwiown.snackmq.common.cluster;

import lombok.Getter;

import java.util.Map;

/**
 * 表示集群元数据发生变化的事件。
 * 该类封装了元数据变更的类型以及相关的上下文信息。
 */
@Getter
public class MetadataChangeEvent {

    /**
     * 枚举类型，表示可能发生的元数据变更事件类型。
     * - PARTITION_ASSIGNMENT_CHANGED：表示分区分配发生变更。
     * - LEADER_CHANGED：表示分区或集群的领导者发生变更。
     */
    public enum EventType {
        PARTITION_ASSIGNMENT_CHANGED,
        LEADER_CHANGED,
        METADATA_LEADER_ELECTED
    }

    private final EventType type;
    private final Map<String, Object> context;

    /**
     * 构造一个新的 MetadataChangeEvent 实例。
     *
     * @param type    元数据变更事件的类型，用于标识变更的性质（例如，分区分配变更或领导者变更）。
     * @param context 包含与事件相关的上下文信息的映射。键是字符串，值是表示上下文数据的对象。
     */
    public MetadataChangeEvent(EventType type, Map<String, Object> context) {
        this.type = type;
        this.context = context;
    }
}